Swift: Recurse clang submodules when computing extension indexes - #22234
Merged
Conversation
jketema
marked this pull request as ready for review
July 27, 2026 11:30
Contributor
There was a problem hiding this comment.
Pull request overview
Recursively indexes extensions and fileprivate values in nested Clang submodules, preventing Swift extraction assertions for deeply nested declarations.
Changes:
- Adds recursive Clang submodule traversal while preserving index continuity.
- Removes an unused generated trap-class include.
Show a summary per file
| File | Description |
|---|---|
swift/extractor/mangler/SwiftMangler.h |
Declares the recursive indexing helper. |
swift/extractor/mangler/SwiftMangler.cpp |
Implements recursive indexing across nested Clang submodules. |
Review details
- Files reviewed: 2/2 changed files
- Comments generated: 0
- Review effort level: Medium
geoffw0
reviewed
Jul 29, 2026
| swift::ClangModuleLoader* moduleLoader, | ||
| uint32_t index) { | ||
| for (const auto& submodule : clangModule->submodules()) { | ||
| index = indexClangSubmoduleExtensionsAndFilePrivateValues(submodule, moduleLoader, index); |
Contributor
There was a problem hiding this comment.
As I understand it:
- previously we were exploring submodules, but not recursively (that's added here).
indexis used to identify extensions or file private values internally, it is not a Clang number.- the submodule structure is guaranteed to be acyclic?
Contributor
Author
There was a problem hiding this comment.
- previously we were exploring submodules, but not recursively (that's added here).
Correct.
indexis used to identify extensions or file private values internally, it is not a Clang number.
Correct. We just count extensions in Swift code separately from extensions that come from C++ code (clang).
- the submodule structure is guaranteed to be acyclic?
If not that would mean that C++20 modules can import each other cyclically, which is illegal.
geoffw0
approved these changes
Jul 29, 2026
geoffw0
left a comment
Contributor
There was a problem hiding this comment.
LGTM, and DCA LGTM also. 👍
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I had originally excluded this, as this didn't seem possible. Looks like I was mistaken. The crash on the linked issue is on an extension, not something private.
I just hope this doesn't make things even slower 😅DCA looks ok.Fixes: #22224